﻿using System;
using Core;
using UnityEngine;

namespace Modules.Audio
{
    /// <summary>
    /// 音频管理器类，负责管理音频播放。
    /// 继承自单例模式，使得全局仅有一个实例。
    /// </summary>
    public class AudioPlayer : GameSubsystem
    {
        private AudioSource _player; // 音频播放器组件

        protected override void Awake()
        {
            base.Awake();
            _player = GetComponent<AudioSource>();
            _player.playOnAwake = false; // 不在唤醒时自动播放
            _player.loop = false; // 不循环播放
            DontDestroyOnLoad(_player);
        }

        public float Volume
        {
            set => _player.volume = value;
            get => _player.volume;
        }

        public float Pitch
        {
            set => _player.pitch = value;
            get => _player.pitch;
        }

        /// <summary>
        /// 播放指定名称的音频。
        /// </summary>
        /// <param name="clip">要播放的音频剪辑。</param>
        /// <returns>返回音频剪辑的长度。</returns>
        /// <exception cref="ArgumentNullException">当指定名称的音频剪辑未找到时抛出该异常。</exception>
        public float Play(AudioClip clip)
        {
            Stop(); // 停止当前播放的音频
            _player.clip = clip;
            _player.Play();
            return clip.length + 0.5f; // 返回音频剪辑的长度
        }

        /// <summary>
        /// 停止播放当前音频。
        /// </summary>
        public void Stop()
        {
            if (_player != null && _player.isPlaying) // 如果正在播放
                _player.Stop(); // 停止播放
        }
    }
}